/**
 * 图片工具函数
 */

/**
 * 获取完整的图片URL
 * @param imageUrl 图片路径，可能是相对路径或完整URL
 * @returns 完整的图片URL
 */
export function getFullImageUrl(imageUrl: string | null | undefined): string {
  if (!imageUrl) {
    console.warn('🖼️ ImageUtils: 图片URL为空，使用默认图片')
    return getDefaultImage()
  }

  // 如果已经是完整的URL（包含协议），直接返回
  if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) {
    console.log('🖼️ ImageUtils: 使用完整URL:', imageUrl)
    return imageUrl
  }

  // 如果是绝对路径（以 / 开头），需要拼接后端服务器地址
  if (imageUrl.startsWith('/')) {
    // 开发环境使用 Vite 代理，生产环境需要配置实际的后端地址
    const baseUrl = import.meta.env.PROD 
      ? import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080'
      : '' // 开发环境使用 Vite 代理，直接返回路径

    const fullUrl = `${baseUrl}${imageUrl}`
    console.log('🖼️ ImageUtils: 绝对路径处理:', {
      原始路径: imageUrl,
      环境: import.meta.env.PROD ? '生产' : '开发',
      基础URL: baseUrl,
      完整URL: fullUrl
    })
    
    return fullUrl
  }

  // 如果是相对路径但不以 / 开头，添加 /uploads/ 前缀
  const baseUrl = import.meta.env.PROD 
    ? import.meta.env.VITE_API_BASE_URL || 'http://localhost:8080'
    : ''

  const fullUrl = `${baseUrl}/uploads/${imageUrl}`
  console.log('🖼️ ImageUtils: 相对路径处理:', {
    原始路径: imageUrl,
    环境: import.meta.env.PROD ? '生产' : '开发',
    基础URL: baseUrl,
    完整URL: fullUrl
  })

  return fullUrl
}

/**
 * 获取默认图片
 * @param type 图片类型：banner, culture, tutorial, news, user
 * @returns 默认图片URL
 */
export function getDefaultImage(type: string = 'banner'): string {
  const defaultImages = {
    banner: 'https://images.unsplash.com/photo-1578662996442-48f60103fc96?w=1200&h=400&fit=crop&crop=center&q=80',
    culture: 'https://images.unsplash.com/photo-1513475382585-d06e58bcb0e0?w=800&h=600&fit=crop&crop=center&q=80',
    tutorial: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=800&h=600&fit=crop&crop=center&q=80',
    news: 'https://images.unsplash.com/photo-1581833971358-2c8b550f87b3?w=800&h=600&fit=crop&crop=center&q=80',
    user: 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=200&h=200&fit=crop&crop=face&q=80'
  }

  return defaultImages[type as keyof typeof defaultImages] || defaultImages.banner
}

/**
 * 处理图片加载错误
 * @param event 图片加载错误事件
 * @param type 图片类型
 */
export function handleImageError(event: Event, type: string = 'banner'): void {
  const img = event.target as HTMLImageElement
  if (img && img.src !== getDefaultImage(type)) {
    img.src = getDefaultImage(type)
  }
}

/**
 * 预加载图片
 * @param imageUrl 图片URL
 * @returns Promise<boolean> 加载成功返回true，失败返回false
 */
export function preloadImage(imageUrl: string): Promise<boolean> {
  return new Promise((resolve) => {
    const img = new Image()
    img.onload = () => resolve(true)
    img.onerror = () => resolve(false)
    img.src = getFullImageUrl(imageUrl)
  })
}

/**
 * 批量预加载图片
 * @param imageUrls 图片URL数组
 * @returns Promise<boolean[]> 每个图片的加载结果
 */
export function preloadImages(imageUrls: string[]): Promise<boolean[]> {
  return Promise.all(imageUrls.map(url => preloadImage(url)))
}

/**
 * 获取图片尺寸
 * @param imageUrl 图片URL
 * @returns Promise<{width: number, height: number} | null>
 */
export function getImageSize(imageUrl: string): Promise<{width: number, height: number} | null> {
  return new Promise((resolve) => {
    const img = new Image()
    img.onload = () => {
      resolve({
        width: img.naturalWidth,
        height: img.naturalHeight
      })
    }
    img.onerror = () => resolve(null)
    img.src = getFullImageUrl(imageUrl)
  })
}

/**
 * 压缩图片URL（添加压缩参数）
 * @param imageUrl 原始图片URL
 * @param width 目标宽度
 * @param height 目标高度
 * @param quality 图片质量 (0-100)
 * @returns 压缩后的图片URL
 */
export function compressImageUrl(
  imageUrl: string, 
  width?: number, 
  height?: number, 
  quality: number = 80
): string {
  const fullUrl = getFullImageUrl(imageUrl)
  
  // 如果是 Unsplash 图片，使用其压缩参数
  if (fullUrl.includes('unsplash.com')) {
    const params = new URLSearchParams()
    if (width) params.set('w', width.toString())
    if (height) params.set('h', height.toString())
    params.set('q', quality.toString())
    params.set('fit', 'crop')
    params.set('crop', 'center')
    
    return `${fullUrl.split('?')[0]}?${params.toString()}`
  }
  
  // 对于其他图片，如果后端支持压缩参数，可以在这里添加
  return fullUrl
}
